package core

import (
	"time"

	logger "gitee.com/krio/ginc/example/core/lib/logger/zaplog"
	"google.golang.org/grpc"
	"google.golang.org/grpc/backoff"
	"google.golang.org/grpc/credentials/insecure"
)

// GrpcConn grpc客户端连接
func GrpcConn(addr string) *grpc.ClientConn {
	// 单位是字节, 参数类型是int, 也就是最大支持发送接收为2G-1个字节
	// 既可以接收大小 grpc.MaxCallRecvMsgSize(1024 * 1024 * 20)
	// 可以使用 DialOptions 在 grpc.Dial 中设置授权认证（如， TLS，GCE认证，JWT认证），
	// 如果服务有这样的要求的话 —— 但是对于RouteGuide服务，我们不用这么做。
	client, err := grpc.Dial(
		addr,
		grpc.WithTransportCredentials(insecure.NewCredentials()),
		grpc.WithDefaultCallOptions(
			grpc.MaxCallRecvMsgSize(1024*1024*200), // 可发送大小
		),
		grpc.WithConnectParams(
			grpc.ConnectParams{
				MinConnectTimeout: time.Second * 3, // 最小连接超时
				Backoff:           backoff.DefaultConfig,
			},
		),
	)
	if err != nil {
		logger.Fatalf("dial grpc %v failed, err: %v", addr, err)
	}

	return client
}
